// { "allowAliases": "always" }
// primitives
type Foo = 'a';

type Foo = 'a' | 'b';

type Foo = string;

type Foo = string | string[];

type Foo = string & string[];

type Foo = `foo-${number}`;

// reference types
interface Bar {}
class Baz implements Bar {}

type Foo = Bar;

type Foo = Bar | Baz;

type Foo = Bar & Baz;

type A = 'a' & ('b' | 'c');

type Foo = 'a';

type Foo = 'a' | 'b';

type Foo = 'a' | 'b' | 'c';

type Foo = 'a' & 'b';

type Foo = 'a' & 'b' & 'c';

type Foo = 'a' | ('b' & 'c');

type Foo = 1;

type Foo = 1 | 2;

type Foo = 1 | 2 | 3;

type Foo = 1 & 2;

type Foo = 1 & 2 & 3;

type Foo = 1 | (2 & 3);

type Foo = `a-${number}`;

type Foo = `a-${number}` | `b-${number}`;

type Foo = `a-${number}` | `b-${number}` | `c-${number}`;

type Foo = `a-${number}` & `b-${number}`;

type Foo = `a-${number}` & `b-${number}` & `c-${number}`;

type Foo = `a-${number}` | (`b-${number}` & `c-${number}`);

type Foo = true;

type Foo = true | false;

type Foo = true & false;

interface Bar {}
type Foo = Bar | string;

interface Bar {}
type Foo = Bar & string;

type Foo = string;

type Foo = string | string[];

type Foo = string | string[] | number;

type Foo = string & string[];

type Foo = string & string[] & number;

type Foo = typeof bar;

type Foo = typeof import('foo');

const WithAKey = { AKey: true };
type KeyNames = keyof typeof SCALARS;
